package co.dreamapps.cyk.main;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.io.IOException;

import co.dreamapps.cyk.modelo.Cyk;

public class Main 
{
 
	private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

	public static void main(String[] args) 
	{
		System.out.println("\n--------------------------------BIENVENIDO------------------------------------\n");		  
		  System.out.println("------------------------------------------------------------------------------");
		char opcionMenu;
		do
		{
			opcionMenu = '\0';
			try
			{   System.out.println("-------------------------------MENU PRINCIPAL---------------------------------\n");
				System.out.println("-Escriba '1' luego ENTER para: EJECUTAR CYK");
				System.out.println("-Escriba '2' luego ENTER para: AYUDA");
				System.out.println("-Escriba '3' luego ENTER para: SALIR");
				System.out.println("------------------------------------------------------------------------------\n");
				

				String cadenaTemporal = bufferedReader.readLine();
				if(cadenaTemporal.trim().equals("") == false)
				{
					opcionMenu = cadenaTemporal.charAt(0);
				}
				
				switch(opcionMenu)
				{
					case '1':
						SimulateGrammar();
						break;
				
					case '2':
						System.out.println("\n---------------------------------AYUDA--------------------------------------\n");
						System.out.println("\n1) Abrir* el archivo \'gramaticaFNC.txt\'\n   *Si el archivo de texto no existe, creelo con ese nombre.\n2) Ingrese la gramatica en Forma Normal de Chomsky (G) y seguidamente la cadena (w),\nutilizando el siguiente esquema:\n---------------------------------------------\nProducciones:\nS->BA|AC\nA->CC|b\nB->AB|a\nC->BA|a\nCadena:bbab\n---------------------------------------------\nSin Espacios y tal como se muestra en el esquema.\n3) Ejecute el programa");
						System.out.println("----------------------------------------------------------------------------\n");
						break;
						
					case '3':
						System.out.println("\n--------------------------------GRACIAS-------------------------------------\n");
						System.out.println("\n-Gracias por utilizar nuestra aplicacion.");
						System.out.println("\n-DreamAppsCo:");
						System.out.println("           : Borrero, Manuel Alejandro");
						System.out.println("           : Ortegon, Camilo Jose");
						System.out.println("-Informatica Teorica- Prof. Alfonso Bustamante");
						System.out.println("-----------------------------------------------------------------------------\n");
						break;
						
					default:
						System.out.println("\n###########################  Advertencia!  ##################################\n");
						System.out.println("-Por favor ingrese una opcion valida");
						System.out.println("#############################################################################\n");
						
						break;
				}
			} 
			catch (IOException e)
			{
				System.out.println("\n###########################  Advertencia!  ##################################\n");
				System.out.println("-IOException");
				System.out.println("#############################################################################\n");
				System.exit(0);
			}
		} while(opcionMenu != '3');
	}
	
	public static void SimulateGrammar() 
	{
		try
		{ 
			System.out.println("============================Ingreso de parametros==============================");
			System.out.println("          (1)Ingresar la gramatica y la cadena en el archivo 'gramaticaFNC.txt'");
			System.out.println("          (2)Una vez ingresada la informacion, guardar el archivo.");
			System.out.println("          (3)Cuando haya finalizado (1) y (2) pulse ENTER para continuar.");
			System.out.println("===============================================================================");
			String rutaGramaticaFNC = bufferedReader.readLine();
			
			if(rutaGramaticaFNC.trim().equals(""))
			{
				rutaGramaticaFNC = "gramaticaFNC.txt";
			}
			
			if(new File(rutaGramaticaFNC).exists() == false)
			{
				System.out.println("\n###########################  Advertencia!  ##################################\n");
				System.out.println("-No se pudo encontrar: \"" + rutaGramaticaFNC + "\"!");
				System.out.println("-Verifique que el archivo existe en la carpeta del proyecto!");
				System.out.println("#############################################################################\n");
				System.out.println();
				return;
			}
			new Cyk(rutaGramaticaFNC).algoritmoCYK();
		} catch (IOException e)
		{
			System.out.println("\n###########################  Advertencia!  ##################################\n");
			System.out.println("-Revise el nombre del archivo e intente de nuevo");
			System.out.println("-IOException");
			System.out.println("#############################################################################\n");
			
		}
	}
}



